iT邦幫忙

2023 iThome 鐵人賽

DAY 3
2
Modern Web

什麼!在網頁上也可以寫遊戲?系列 第 3

[Day 03] CG 同人陣的運作原理

  • 分享至 

  • xImage
  •  

昨天的結尾,我們正式的開啟了 CG 同人陣的大門,而在我們開始實際使用 CG 同人陣的功能之前,想先跟各位介紹一下。

CgEventsEngine

CG 同人陣實際上是一個叫做 CgEventsEngine 的模組,也就是 CG 事件表引擎,同樣是小哈在 CG 上開發的模組,由於名稱的關係,我個人會更習慣稱呼它為 事件表,實際上事件表在專案內檔案的副檔名也是 .events,所以接下來我就用這個名字來跟各位介紹啦~

事件表的運作原理

事件表之所以稱之為事件表,是因為每一個事件表中都可以塞很多很多事件,而每一個事件,又分為三個部分,第一天時我有稍微提到,分別為觸發、檢查、動作,其中以動作最為基本。

  • 動作:拿遊戲裡的勇者來比喻的話,如果勇者是一個事件表,那麼動作就好比是勇者的行為,前進、後退、攻擊、防禦,動作寫了什麼,就會讓勇者執行什麼。

  • 檢查:檢查就像是勇者的大腦一樣,無時無刻都在思考著,對方看起來是不是很弱、要不要上去偷襲他、快死了該不該逃跑,這時事件就不會直接執行動作,而是要等檢查通過後,才會執行動作,例如因為對方很弱,所以可以上去偷襲他,因為我快死了,所以趕快逃跑。

  • 觸發:與單純只有檢查的事件不同,觸發是指當勇者接收到某一個指令、消息時,才會開始進行檢查,檢查通過後才會執行動作,例如受到攻擊、擊殺對方、按下按鍵,這種一瞬間的事情,就很有可能會在觸發中,例如我需要當勇者被攻擊時發出哀號聲,或是按下滑鼠左鍵時會發動攻擊等。

事件設定

除了上述介紹的三個部分以外,事件本身還有一些自己的設定,在新增、編輯事件的時候,就會顯示如上圖的畫面,每個欄位下方都有簡單的說明,稍後再來仔細介紹這些設定,在這之前,我們先來了解一些事項。

每個事件表的頂端,都有一個 試玩遊戲 的按鈕,按下就會開啟另外一個視窗,開始運行事件表的內容,當系統加載完所需的資源以後,便會開始執行事件表內的事件。

事件被執行的順序為,觸發 > 檢查 > 動作,當事件有被設置觸發時,需要該觸發接收到某個消息時,才會檢查是否執行動作,而若是沒有設置觸發時,系統就會一直重複檢查是否要執行動作,而若是連檢查都沒有,那當然就是直接執行動作了。

接著我們再回到事件本身的設定上,不知道各位對於這些設定有沒有比較清楚一點了呢?

  • 事件ID:這就是事件的名稱,每個事件都會有自己的功能、作用,為每一個事件取一個與其相符的名字,整個事件表看起來就會比較直覺,也會讓我們之後如果製作一些比較大型的作品時,萬一有需要修改的地方,也比較容易找到對應的事件,所以為每個事件取一個好名字是很重要的!
  • 事件匣:這個就有點像是一個資料夾,只是裝的內容物是各個事件,主要功能就如同圖片中說明的一樣「使用事件匣分類事件,以增加尋找事件的效率。」,若有許多類似功能的事件,就可以考慮將他們加入同一個事件匣中,就跟事件 ID 一樣,日後若是事件的數量變多之後,才能更快的找到需要的事件。
  • 起始時間:上方提到當事件表開始執行時,便會開始觸發事件,而這個就是用來設定事件在開始時,要過多久才會開始觸發事件,預設為 0,也就是說如果沒有設定,所有的事件都是在事件表剛執行時就會被觸發。
  • 檢查間隔:上方有提到若事件內有設定檢查,且沒有設定觸發時,系統會一直不斷地檢查是否通過,這個就是用來決定該事件要每隔多久檢查一次,最少需要是 1 毫秒,不過設定的越低,就代表系統就要更頻繁的去檢查是否通過,這無疑是一種對性能的負擔,所以根據事件的功能有所不同,通常會彈性調整。
  • 重覆次數:事件本身可以設定重複次數,會決定該事件會被執行幾次,預設為 0,也就是不重複,所以只會執行一次,若有像是受傷時扣血這種需要不斷重複的事件,次數可以寫成 -1,該事件就能夠被無限次的觸發了。
  • 重覆間隔:這個設定跟重複次數有關,是指當事件被觸發運行後,下一次重複觸發的間隔時間,也就是說這對於不會重複的事件沒有影響,而相關的用途就例如可以每隔一段時間,幫玩家補血等等。

好了,理論的東西暫時就先講到這裡,講這麼多不如實際操作一翻,相信大家都已經迫不及待的想要做點什麼了,明天就會以動作為主,開始進入實作篇囉~


上一篇
[Day 02] 建立新的 Code.Gamelet 專案
下一篇
[Day 04] 事件表實作 - 動作篇
系列文
什麼!在網頁上也可以寫遊戲?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言